package cn.iocoder.yudao.module.social.service.content;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.social.controller.app.content.vo.AppContentRespVO;
import cn.iocoder.yudao.module.social.convert.content.AppContentConvert;
import cn.iocoder.yudao.module.social.dal.dataobject.content.ContentDO;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 用户端内容转换服务
 *
 * @author 芋道源码
 */
@Service
public class AppContentConvertService {

    /**
     * 转换内容并添加权限信息
     *
     * @param content 内容DO
     * @param currentUserId 当前用户ID
     * @return 用户端内容VO
     */
    public AppContentRespVO convertWithPermissions(ContentDO content, Long currentUserId) {
        if (content == null) {
            return null;
        }

        AppContentRespVO respVO = AppContentConvert.INSTANCE.convert(content);
        
        // 设置权限信息
        boolean isMyContent = currentUserId != null && currentUserId.equals(content.getAuthorId());
        boolean isAdmin = currentUserId != null && currentUserId.equals(1L); // 假设用户ID=1为管理员
        
        respVO.setIsMyContent(isMyContent);
        respVO.setCanEdit(isMyContent || isAdmin);
        respVO.setCanDelete(isMyContent || isAdmin);
        
        return respVO;
    }

    /**
     * 转换内容列表并添加权限信息
     *
     * @param contents 内容DO列表
     * @param currentUserId 当前用户ID
     * @return 用户端内容VO列表
     */
    public List<AppContentRespVO> convertListWithPermissions(List<ContentDO> contents, Long currentUserId) {
        if (contents == null || contents.isEmpty()) {
            return List.of();
        }

        return contents.stream()
                .map(content -> convertWithPermissions(content, currentUserId))
                .collect(Collectors.toList());
    }

    /**
     * 转换分页结果并添加权限信息
     *
     * @param pageResult 分页结果
     * @param currentUserId 当前用户ID
     * @return 用户端内容分页VO
     */
    public PageResult<AppContentRespVO> convertPageWithPermissions(PageResult<ContentDO> pageResult, Long currentUserId) {
        if (pageResult == null) {
            return null;
        }

        List<AppContentRespVO> list = convertListWithPermissions(pageResult.getList(), currentUserId);
        return new PageResult<>(list, pageResult.getTotal());
    }

    /**
     * 过滤并转换内容列表（基于星球ID）
     *
     * @param contents 内容DO列表
     * @param planetId 星球ID
     * @param currentUserId 当前用户ID
     * @return 过滤后的用户端内容VO列表
     */
    public List<AppContentRespVO> filterAndConvertList(List<ContentDO> contents, Long planetId, Long currentUserId) {
        if (contents == null || contents.isEmpty()) {
            return List.of();
        }

        return contents.stream()
                .filter(content -> planetId.equals(content.getPlanetId()))
                .map(content -> convertWithPermissions(content, currentUserId))
                .collect(Collectors.toList());
    }

}
